﻿#include "OIS.h"

PIMAGE oisImg = nullptr;  // 声明为全局变量

void drawOIS(int x0, int y0, double height)
{
    ege_enable_aa(true, oisImg);
    double oisWidth = height * 1.47153; // 1654
    double oisHeight = height; // 1124
    double oisScale = height / 1124.0f;

    // 检查是否需要创建新图像
    if (oisImg == nullptr ||
        getwidth(oisImg) != oisWidth ||
        getheight(oisImg) != oisHeight) {
        // 释放旧图像
        if (oisImg != nullptr) {
            delimage(oisImg);
        }
        // 创建新图像
        oisImg = newimage(oisWidth, oisHeight);
        if (oisImg == nullptr) {
            // 处理创建失败的情况
            return;
        }
        setbkcolor(EGEARGB(0, 0, 0, 0), oisImg);
    }

    // 清空图像（可选，根据需求决定是否保留）
    //cleardevice(oisImg);

    // 设置窗口标题（通常只需在初始化时设置一次）
    static bool captionSet = false;
    if (!captionSet) {
        setcaption("OIS");
        captionSet = true;
    }
    //setbkcolor(EGEARGB(255, 38, 50, 64));
    // OPTIONS
    drawOPTIONS(oisScale);

    // 绘制图像
    //putimage(x0, y0, oisImg);
}

void drawOPTIONS(double oisScale)
{
    ege_enable_aa(true, oisImg);
    setfont(35 * oisScale, 0, "MS Reference Sans Serif", oisImg);
    setcolor(EGEARGB(255, 120, 120, 120), oisImg);
    settextjustify(LEFT_TEXT, TOP_TEXT, oisImg);
    setlinewidth(3 * oisScale, oisImg);
    ege_outtextxy(16 * oisScale, 2 * oisScale, "PRESS FOR KEY INPUT", oisImg);

    setfillcolor(EGEARGB(255, 64, 64, 64), oisImg);
    ege_fillrect(2 * oisScale, 66 * oisScale, 1650 * oisScale, 38 * oisScale, oisImg);

    setfillcolor(EGEARGB(255, 0, 0, 0), oisImg);
    ege_fillrect(2 * oisScale, 66 * oisScale, 311 * oisScale, 38 * oisScale, oisImg);

    setcolor(EGEARGB(255, 127, 127, 127), oisImg);
    //setlinewidth();
    ege_rectangle(2 * oisScale, 66 * oisScale, 311 * oisScale, 38 * oisScale, oisImg);

    setcolor(EGEARGB(255, 24, 204, 200), oisImg);
    ege_outtextxy(9 * oisScale, 69 * oisScale, "OPTIONS", oisImg);

    setcolor(EGEARGB(255, 255, 255, 255), oisImg);
    ege_outtextxy(413 * oisScale, 69 * oisScale, "OPTIONS", oisImg);

    setcolor(EGEARGB(255, 125, 125, 125), oisImg);
    ege_outtextxy(1570 * oisScale, 69 * oisScale, "6  1", oisImg);

    drawOISTriangle(279 * oisScale, 74 * oisScale, 24.24f * oisScale, oisScale);

    drawOISRect(1320 * oisScale, 565 * oisScale, 281 * oisScale, 35 * oisScale, oisScale);
    drawOISRect(1320 * oisScale, 630 * oisScale, 281 * oisScale, 35 * oisScale, oisScale);
    drawOISRect(1320 * oisScale, 695 * oisScale, 281 * oisScale, 35 * oisScale, oisScale);
    drawOISRect(1320 * oisScale, 760 * oisScale, 281 * oisScale, 35 * oisScale, oisScale);

    drawOISRect(908 * oisScale, 1044 * oisScale, 306 * oisScale, 35 * oisScale, oisScale);
    drawOISRect(1288 * oisScale, 1044 * oisScale, 306 * oisScale, 35 * oisScale, oisScale);

    drawOISRect(1164 * oisScale, 912 * oisScale, 36 * oisScale, 36 * oisScale, oisScale);
    drawOISRect(1560 * oisScale, 912 * oisScale, 36 * oisScale, 36 * oisScale, oisScale);

    drawOISTriangleLeft(1192 * oisScale, 916 * oisScale, 24.24f * oisScale, oisScale);
    drawOISTriangleLeft(1567 * oisScale, 916 * oisScale, -24.24f * oisScale, oisScale);

    setfillcolor(EGEARGB(255, 64, 64, 64), oisImg);
    ege_fillrect(1215 * oisScale, 912 * oisScale, 330 * oisScale, 36 * oisScale, oisImg);
    // 圆圈
    drawOISCircle(59 * oisScale , 223 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(59 * oisScale, 257 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(59 * oisScale, 356 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(59 * oisScale, 389 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(59 * oisScale, 488 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(59 * oisScale, 521 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(59 * oisScale, 621 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(59 * oisScale, 654 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(59 * oisScale, 852 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(59 * oisScale, 885 * oisScale, EGEARGB(255, 255, 255, 255), oisScale);

    drawOISCircle(390 * oisScale, 223 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(390 * oisScale, 257 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(390 * oisScale, 356 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(390 * oisScale, 389 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(390 * oisScale, 488 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(390 * oisScale, 521 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(390 * oisScale, 554 * oisScale, EGEARGB(255, 255, 255, 255), oisScale);
    drawOISCircle(390 * oisScale, 653 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(390 * oisScale, 687 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(390 * oisScale, 785 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(390 * oisScale, 819 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(390 * oisScale, 919 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(390 * oisScale, 952 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);

    drawOISCircle(721 * oisScale, 223 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(721 * oisScale, 257 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(721 * oisScale, 290 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(721 * oisScale, 389 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(721 * oisScale, 422 * oisScale, EGEARGB(255, 255, 255, 255), oisScale);
    drawOISCircle(721 * oisScale, 521 * oisScale, EGEARGB(255, 255, 255, 255), oisScale);
    drawOISCircle(721 * oisScale, 555 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(721 * oisScale, 587 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(721 * oisScale, 687 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(721 * oisScale, 720 * oisScale, EGEARGB(255, 255, 255, 255), oisScale);
    drawOISCircle(721 * oisScale, 818 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(721 * oisScale, 853 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);

    drawOISCircle(1035 * oisScale, 223 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(1035 * oisScale, 257 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(1035 * oisScale, 389 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(1035 * oisScale, 422 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(1035 * oisScale, 455 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(1035 * oisScale, 489 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(1035 * oisScale, 719 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);
    drawOISCircle(1035 * oisScale, 753 * oisScale, EGEARGB(255, 255, 255, 255), oisScale);

    drawOISCircle(1383 * oisScale, 223 * oisScale, EGEARGB(255, 32, 200, 33), oisScale);
    drawOISCircle(1383 * oisScale, 257 * oisScale, EGEARGB(255, 64, 64, 64), oisScale);

    ege_enable_aa(true, oisImg);
    // 灰色文字
    setcolor(EGEARGB(255, 120, 120, 120), oisImg);
    settextjustify(LEFT_TEXT, TOP_TEXT, oisImg);
    setlinewidth(3 * oisScale, oisImg);
    ege_outtextxy(48 * oisScale, 175 * oisScale, "TIME FLOW", oisImg);
    ege_outtextxy(84 * oisScale, 253 * oisScale, "REAL", oisImg);
    ege_outtextxy(48 * oisScale, 306 * oisScale, "DIFFICULTY LEVEL", oisImg);
    ege_outtextxy(84 * oisScale, 350 * oisScale, "EASY", oisImg);
    ege_outtextxy(48 * oisScale, 442 * oisScale, "STRUCTURAL LIMITS", oisImg);
    ege_outtextxy(84 * oisScale, 483 * oisScale, "STRONG", oisImg);
    ege_outtextxy(48 * oisScale, 571 * oisScale, "DEFAULT BARO UNITS", oisImg);
    ege_outtextxy(84 * oisScale, 612 * oisScale, "inHG", oisImg);
    ege_outtextxy(48 * oisScale, 707 * oisScale, "DEFAULT TRANS ALT", oisImg);
    ege_outtextxy(48 * oisScale, 802 * oisScale, "ILS AUTO ALTGN", oisImg);
    ege_outtextxy(84 * oisScale, 847 * oisScale, "ON", oisImg);
        // 第二列
    ege_outtextxy(381 * oisScale, 175 * oisScale, "gl DRAW LINES", oisImg);
    ege_outtextxy(412 * oisScale, 253 * oisScale, "DEFAULT", oisImg);
    ege_outtextxy(381 * oisScale, 306 * oisScale, "gl FLUSHING", oisImg);
    ege_outtextxy(412 * oisScale, 385 * oisScale, "DEFAULT", oisImg);
    ege_outtextxy(381 * oisScale, 442 * oisScale, "AUTO PAUSE", oisImg);
    ege_outtextxy(412 * oisScale, 483 * oisScale, "ON ALERTS", oisImg);
    ege_outtextxy(412 * oisScale, 518 * oisScale, "ON WARNINGS", oisImg);
    ege_outtextxy(381 * oisScale, 608 * oisScale, "FCU FONT", oisImg);
    ege_outtextxy(412 * oisScale, 649 * oisScale, "LED STYLE", oisImg);
    ege_outtextxy(381 * oisScale, 740 * oisScale, "MFD CONTROL", oisImg);
    ege_outtextxy(412 * oisScale, 814 * oisScale, "TOUCH SCREEN", oisImg);
    ege_outtextxy(381 * oisScale, 872 * oisScale, "REVERSE MODE", oisImg);
    ege_outtextxy(412 * oisScale, 914 * oisScale, "REDULAR", oisImg);
         // 第三列
    ege_outtextxy(711 * oisScale, 175 * oisScale, "MOUSE WHEEL", oisImg);
    ege_outtextxy(742 * oisScale, 216 * oisScale, "ZOOM ONLY", oisImg);
    ege_outtextxy(742 * oisScale, 287 * oisScale, "CLICK + MANIP", oisImg);
    ege_outtextxy(711 * oisScale, 342 * oisScale, "AUTO HELPER", oisImg);
    ege_outtextxy(742 * oisScale, 385 * oisScale, "ON", oisImg);
    ege_outtextxy(711 * oisScale, 473 * oisScale, "X-FMC SUPPORT", oisImg);
    ege_outtextxy(742 * oisScale, 550 * oisScale, "AUTO", oisImg);
    ege_outtextxy(742 * oisScale, 582 * oisScale, "YES", oisImg);
    ege_outtextxy(711 * oisScale, 640 * oisScale, "SCREENS GLOW", oisImg);
    ege_outtextxy(742 * oisScale, 683 * oisScale, "ENABLED", oisImg);
    ege_outtextxy(711 * oisScale, 774 * oisScale, "POPUP TYPE", oisImg);
    ege_outtextxy(742 * oisScale, 849 * oisScale, "IN SCREEN", oisImg);

        // 第四列
    ege_outtextxy(1024 * oisScale, 175 * oisScale, "CURSOR ON DISPLAY", oisImg);
    ege_outtextxy(1057 * oisScale, 216 * oisScale, "DISPLAY + OS", oisImg);
    ege_outtextxy(1024 * oisScale, 343 * oisScale, "AUTO PAUSE", oisImg);
    ege_outtextxy(1057 * oisScale, 416 * oisScale, "ON WARN ONLY", oisImg);
    ege_outtextxy(1057 * oisScale, 452 * oisScale, "ON WARN AND CAUT", oisImg);
    ege_outtextxy(1057 * oisScale, 485 * oisScale, "ON WARN/CAUT/TOD PASSED", oisImg);
    ege_outtextxy(1024 * oisScale, 541 * oisScale, "SIMBRIEF ID", oisImg);
    ege_outtextxy(1024 * oisScale, 638 * oisScale, "IGONRE AIRAC/AC", oisImg);
    ege_outtextxy(1024 * oisScale, 673 * oisScale, "TYPE MISMATCH", oisImg);
    ege_outtextxy(1057 * oisScale, 715 * oisScale, "ON", oisImg);
        // 第五列
    ege_outtextxy(1372 * oisScale, 175 * oisScale, "DRAW PILOTS", oisImg);
    ege_outtextxy(1405 * oisScale, 253 * oisScale, "EVERYWHERE", oisImg);




    // 绿色文字
    setcolor(EGEARGB(255, 32, 200, 33), oisImg);
    ege_outtextxy(84 * oisScale, 216 * oisScale, "FAST", oisImg);
    ege_outtextxy(84 * oisScale, 385 * oisScale, "REAL", oisImg);
    ege_outtextxy(84 * oisScale, 518 * oisScale, "REAL", oisImg);
    ege_outtextxy(84 * oisScale, 649 * oisScale, "hPa", oisImg);
    ege_outtextxy(66 * oisScale, 748 * oisScale, "5000", oisImg);
           // 第二列
    ege_outtextxy(412 * oisScale, 216 * oisScale, "FAST", oisImg);
    ege_outtextxy(412 * oisScale, 350 * oisScale, "MINIMAL", oisImg);
    ege_outtextxy(412 * oisScale, 682 * oisScale, "NEW STYLE", oisImg);
    ege_outtextxy(412 * oisScale, 781 * oisScale, "WHELL + POPUP", oisImg);
    ege_outtextxy(412 * oisScale, 948 * oisScale, "F1F2 BELOW IDLE", oisImg);
           // 第三列
    ege_outtextxy(742 * oisScale, 253 * oisScale, "MANIPULATE", oisImg);
    ege_outtextxy(742 * oisScale, 814 * oisScale, "X-PLANE WINDOW", oisImg);
           // 第四列
    ege_outtextxy(1057 * oisScale, 253 * oisScale, "DISPLAY ONLY", oisImg);
    ege_outtextxy(1057 * oisScale, 383 * oisScale, "DISARMED", oisImg);
           // 第五列
    ege_outtextxy(1405 * oisScale, 216 * oisScale, "OUTSIDE ONLY", oisImg);


    // 白色文字
    setcolor(EGEARGB(255, 255, 255, 255), oisImg);
    ege_outtextxy(84 * oisScale, 880 * oisScale, "OFF", oisImg);
    ege_outtextxy(950 * oisScale, 1046 * oisScale, "SAVE CURRENT", oisImg);
    ege_outtextxy(1302 * oisScale, 1046 * oisScale, "RESTORE DEFAULTS", oisImg);
        // 第二列
    ege_outtextxy(412 * oisScale, 550 * oisScale, "OFF", oisImg);
        // 第三列
    ege_outtextxy(742 * oisScale, 418 * oisScale, "OFF", oisImg);
    ege_outtextxy(742 * oisScale, 516 * oisScale, "NO", oisImg);
    ege_outtextxy(742 * oisScale, 716 * oisScale, "DISABLED", oisImg);
        // 第四列
    ege_outtextxy(1057 * oisScale, 748 * oisScale, "OFF", oisImg);


    setcolor(EGEARGB(255, 127, 127, 127), oisImg);
    setlinewidth(3 * oisScale, oisImg);
    ege_rectangle(48* oisScale, 746 * oisScale, 109 * oisScale, 36 * oisScale, oisImg);
    ege_rectangle(1024 * oisScale, 581 * oisScale, 161 * oisScale, 36 * oisScale, oisImg);
    ege_outtextxy(1343 * oisScale, 567 * oisScale, "CKPT AUTO PREP", oisImg);
    ege_outtextxy(1336 * oisScale, 632 * oisScale, "FORCE ALIGN IRS", oisImg);
    ege_outtextxy(1370 * oisScale, 698 * oisScale, "JUMP 100 NM", oisImg);
    ege_outtextxy(1328 * oisScale, 761 * oisScale, "JUMP TO NEXT WPT", oisImg);

    setfillcolor(EGEARGB(255, 77, 100, 94), oisImg);
    ege_fillrect(1219 * oisScale, 916 * oisScale, 32 * oisScale, 28 * oisScale, oisImg);
}

void drawOISTriangle(double x0, double y0, double height, double oisScale)
{
    // 右边的三角形
    ege_point triangle[] = {
        x0, y0,
        (x0 + 28.0f * oisScale), y0,
        (x0 + 14.0f * oisScale), (y0 + height),
    };

    setfillcolor(EGEARGB(255, 255, 255, 255), oisImg);
    ege_fillpoly(sizeof(triangle) / sizeof(triangle[0]), triangle, oisImg);
}

void drawOISCircle(double x0, double y0, color_t color, double oisScale)
{
    x0 -= 11.5f * oisScale;
    setfillcolor(EGEARGB(255, 64, 64, 64), oisImg);
    ege_fillellipse(x0, y0, 23.0f * oisScale, 23.0f * oisScale, oisImg);

    setcolor(EGEARGB(255, 125, 125, 125), oisImg);
    setlinewidth(3 * oisScale, oisImg);
    ege_ellipse(x0, y0, 23.0f * oisScale, 23.0f * oisScale, oisImg);

    setfillcolor(color, oisImg);
    ege_fillellipse(x0 + 5.75f * oisScale, y0 + 5.75f * oisScale, 11.5f * oisScale, 11.5f * oisScale, oisImg);

}

void drawOISTriangleLeft(double x0, double y0, double height, double oisScale)
{
    // 右边的三角形
    ege_point triangle[] = {
        x0, y0,
        (x0), y0 + 28.0f * oisScale,
        (x0 - height), (y0 + 14.0f * oisScale),
    };

    setfillcolor(EGEARGB(255, 255, 255, 255), oisImg);
    ege_fillpoly(sizeof(triangle) / sizeof(triangle[0]), triangle, oisImg);
}

void drawOISRect(double x0, double y0, double width, double height, double oisScale)
{
    setfillcolor(EGEARGB(255, 64, 64, 64), oisImg);
    ege_fillrect(x0, y0, width, height, oisImg);
    setcolor(EGEARGB(255, 127, 127, 127), oisImg);
    setlinewidth(3 * oisScale, oisImg);
    ege_rectangle(x0, y0, width, height, oisImg);
}

// 在程序结束时释放资源
void cleanupOIS() {
    if (oisImg != nullptr) {
        delimage(oisImg);
        oisImg = nullptr;
    }
}